package Controleur;
import modele.Snapshot;
import java.util.ArrayList;
/******************************************************
Cours : LOG120
Session : E2011
Groupe : 01
Projet : Laboratoire #4
�tudiant(e)(s) : Sean Blahovici
Mathieu Ferchaud
Code(s) perm. : BLAS30068807

Professeur : Chamseddine Talhi
Charg� de labo : Eric Goulet
Nom du fichier : FileManager.java
Date cr�� : 2011-07-21
Date dern. modif. 2011-07-21
*******************************************************
Historique des modifications
*******************************************************
2011-07-21 Version initiale (1)
*******************************************************/
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;

import javax.swing.JFileChooser;

import modele.Modele;

/*
 * Classe qui permet la sauvegarde et la r�cup�ration d'un
 * objet Modele Serializable. Cette classe � ce stade permet la sauvegarde
 * et la r�cup�ration d'un fichier avec n'importe quelle extension.
 */

public class FileManager {
	
	/*
	 * Constructeur par d�faut
	 */
	public FileManager(){
		
	}
	//log120
	/*
	 * M�thode de sauvegarde d'un mod�le, on cr�er une instance
	 * de ObjectOutputStream et on lui passe une instance de OutputStream
	 * dans son constructeur.
	 * 
	 * @param Objet de la classe Modele
	 * @return boolean, si sauvegarde effectu�e ou non.
	 */
	public static boolean sauvegarder(ArrayList<Snapshot> snapshot){
		
		FileOutputStream file;
		JFileChooser jf = new JFileChooser(".");
		int val = jf.showSaveDialog(null); // Affiche la fenetre de sauvegarde
		String nomFichier = null;
		boolean choix_fait = false;
		
		//On attend que le choix se fait avant de faire disparaitre
		//la boite de dialogue.
		while(choix_fait==false){
			
			if (val==JFileChooser.APPROVE_OPTION){
				nomFichier = jf.getSelectedFile().getAbsolutePath();
				choix_fait = true;
			}
			else{
				choix_fait = true;
			}
		}
		
		nomFichier = jf.getSelectedFile().getAbsolutePath(); 
		
		try{
			file = new FileOutputStream(nomFichier);
			
			//Creation de l'instance de OutputStream avec une instance
			//de FileOutputStream pass� dans son constructeur
			ObjectOutputStream oStream = new ObjectOutputStream(file);
			
			//Ecriture sur le disque
			oStream.writeObject(snapshot);
			
			oStream.close();
			
		}
		catch(IOException e){
			e.printStackTrace();
			return false;
		}
		
		return true;
		
	}
	
	
	/*
	 * M�thode pour charger un mod�le en m�moire, va ouvrir
	 * une fen�tre pour s�lectionner un fichier
	 * @return objet de la classe Modele
	 */
	public static ArrayList<Snapshot> charger(){
		
		ArrayList<Snapshot> snapshot = null; //Initialisation d'un objet modele;
		FileInputStream file;
		JFileChooser jf = new JFileChooser(".");
		int val = jf.showOpenDialog(null);//Affiche la fenetre d'ouverture
		boolean choix_fait = false;
		String nomFichier = null;
		
		//On attend que le choix se fait avant de faire disparaitre
		//la boite de dialogue.
		while(choix_fait==false){
			
			if (val==JFileChooser.APPROVE_OPTION){
				nomFichier = jf.getSelectedFile().getAbsolutePath();
				choix_fait = true;
			}
			else{
				choix_fait = true;
			}
		}
		
		try{
			file = new FileInputStream(nomFichier);
			
			//Creation de l'instance de InputStream avec une instance
			//de FileInputStream pass� dans son constructeur
			ObjectInputStream iStream = new ObjectInputStream(file);
			
			/*On lit l'objet sur le disque.
			On doit typecaster Modele car readObject retourne un objet
			de la classe Objet*/
			
			snapshot = ((ArrayList<Snapshot>)iStream.readObject());
			
			iStream.close();
			
		}
		catch(Exception e){
			e.printStackTrace();
			return null;
		}
		return snapshot;
	}
	
}
